Passed
Pull Request — master (#1241)
by
unknown
07:36
created

script.js ➔ toggleActions   A

Complexity

Conditions 3

Size

Total Lines 23
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 21
c 0
b 0
f 0
dl 0
loc 23
rs 9.376
1
var lfm_route = location.origin + location.pathname;
2
var show_list;
3
var sort_type = 'alphabetic';
4
var multi_selection_enabled = false;
5
var selected = [];
6
var items = [];
7
8
$.fn.fab = function (options) {
9
  var menu = this;
10
  menu.addClass('fab-wrapper');
11
12
  var toggler = $('<a>')
13
    .addClass('fab-button fab-toggle')
14
    .append($('<i>').addClass('fas fa-plus'))
15
    .click(function () {
16
      menu.toggleClass('fab-expand');
17
    });
18
19
  menu.append(toggler);
20
21
  options.buttons.forEach(function (button) {
22
    toggler.before(
23
      $('<a>').addClass('fab-button fab-action')
24
        .attr('data-label', button.label)
25
        .attr('id', button.attrs.id)
26
        .append($('<i>').addClass(button.icon))
27
        .click(function () {
28
          menu.removeClass('fab-expand');
29
        })
30
    );
31
  });
32
};
33
34
$(document).ready(function () {
35
  $('#fab').fab({
36
    buttons: [
37
      {
38
        icon: 'fas fa-upload',
39
        label: lang['nav-upload'],
40
        attrs: {id: 'upload'}
41
      },
42
      {
43
        icon: 'fas fa-folder',
44
        label: lang['nav-new'],
45
        attrs: {id: 'add-folder'}
46
      }
47
    ]
48
  });
49
50
  actions.reverse().forEach(function (action) {
51
    $('#nav-buttons > ul').prepend(
52
      $('<li>').addClass('nav-item').append(
53
        $('<a>').addClass('nav-link d-none')
54
          .attr('data-action', action.name)
55
          .attr('data-multiple', action.multiple)
56
          .append($('<i>').addClass('fas fa-fw fa-' + action.icon))
57
          .append($('<span>').text(action.label))
58
      )
59
    );
60
  });
61
62
  sortings.forEach(function (sort) {
63
    $('#nav-buttons .dropdown-menu').append(
64
      $('<a>').addClass('dropdown-item').attr('data-sortby', sort.by)
65
        .append($('<i>').addClass('fas fa-fw fa-' + sort.icon))
66
        .append($('<span>').text(sort.label))
67
        .click(function() {
68
          sort_type = sort.by;
69
          loadItems();
70
        })
71
    );
72
  });
73
74
  loadFolders();
75
  performLfmRequest('errors')
76
    .done(function (response) {
77
      JSON.parse(response).forEach(function (message) {
78
        $('#alerts').append(
79
          $('<div>').addClass('alert alert-warning')
80
            .append($('<i>').addClass('fas fa-exclamation-circle'))
81
            .append(' ' + message)
82
        );
83
      });
84
    });
85
86
  $(window).on('dragenter', function(){
87
    $('#uploadModal').modal('show');
88
  });
89
90
  if (usingWysiwygEditor()) {
91
    $('#multi_selection_toggle').hide();
92
  }
93
});
94
95
// ======================
96
// ==  Navbar actions  ==
97
// ======================
98
99
$('#multi_selection_toggle').click(function () {
100
  multi_selection_enabled = !multi_selection_enabled;
101
102
  $('#multi_selection_toggle i')
103
    .toggleClass('fa-times', multi_selection_enabled)
104
    .toggleClass('fa-check-double', !multi_selection_enabled);
105
106
  if (!multi_selection_enabled) {
107
    clearSelected();
108
  }
109
});
110
111
$('#to-previous').click(function () {
112
  var previous_dir = getPreviousDir();
113
  if (previous_dir == '') return;
114
  goTo(previous_dir);
115
});
116
117
function toggleMobileTree(should_display) {
118
  if (should_display === undefined) {
119
    should_display = !$('#tree').hasClass('in');
120
  }
121
  $('#tree').toggleClass('in', should_display);
122
}
123
124
$('#show_tree').click(function (e) {
125
  toggleMobileTree();
126
});
127
128
$('#main').click(function (e) {
129
  if ($('#tree').hasClass('in')) {
130
    toggleMobileTree(false);
131
  }
132
});
133
134
$(document).on('click', '#add-folder', function () {
135
  dialog(lang['message-name'], '', createFolder);
136
});
137
138
$(document).on('click', '#upload', function () {
139
  $('#uploadModal').modal('show');
140
});
141
142
$(document).on('click', '[data-display]', function() {
143
  show_list = $(this).data('display');
144
  loadItems();
145
});
146
147
$(document).on('click', '[data-action]', function() {
148
  window[$(this).data('action')]($(this).data('multiple') ? getSelectedItems() : getOneSelectedElement());
149
});
150
151
// ==========================
152
// ==  Multiple Selection  ==
153
// ==========================
154
155
function toggleSelected (e) {
156
  if (!multi_selection_enabled) {
157
    selected = [];
158
  }
159
160
  var sequence = $(e.target).closest('a').data('id');
161
  var element_index = selected.indexOf(sequence);
162
  if (element_index === -1) {
163
    selected.push(sequence);
164
  } else {
165
    selected.splice(element_index, 1);
166
  }
167
168
  updateSelectedStyle();
169
}
170
171
function clearSelected () {
172
  selected = [];
173
174
  multi_selection_enabled = false;
175
176
  updateSelectedStyle();
177
}
178
179
function updateSelectedStyle() {
180
  items.forEach(function (item, index) {
181
    $('[data-id=' + index + ']')
182
      .find('.square')
183
      .toggleClass('selected', selected.indexOf(index) > -1);
184
  });
185
  toggleActions();
186
}
187
188
function getOneSelectedElement(orderOfItem) {
189
  var index = orderOfItem !== undefined ? orderOfItem : selected[0];
190
  return items[index];
191
}
192
193
function getSelectedItems() {
194
  return selected.reduce(function (arr_objects, id) {
195
    arr_objects.push(getOneSelectedElement(id));
196
    return arr_objects
197
  }, []);
198
}
199
200
function toggleActions() {
201
  var one_selected = selected.length === 1;
202
  var many_selected = selected.length >= 1;
203
  var only_image = getSelectedItems()
204
    .filter(function (item) { return !item.is_image; })
205
    .length === 0;
206
  var only_file = getSelectedItems()
207
    .filter(function (item) { return !item.is_file; })
208
    .length === 0;
209
210
  $('[data-action=use]').toggleClass('d-none', !(many_selected && only_file));
211
  $('[data-action=rename]').toggleClass('d-none', !one_selected);
212
  $('[data-action=preview]').toggleClass('d-none', !(many_selected && only_file));
213
  $('[data-action=move]').toggleClass('d-none', !many_selected);
214
  $('[data-action=download]').toggleClass('d-none', !(many_selected && only_file));
215
  $('[data-action=resize]').toggleClass('d-none', !(one_selected && only_image));
216
  $('[data-action=crop]').toggleClass('d-none', !(one_selected && only_image));
217
  $('[data-action=trash]').toggleClass('d-none', !many_selected);
218
  $('[data-action=open]').toggleClass('d-none', !one_selected || only_file);
219
  $('#multi_selection_toggle').toggleClass('d-none', usingWysiwygEditor() || !many_selected);
220
  $('#actions').toggleClass('d-none', selected.length === 0);
221
  $('#fab').toggleClass('d-none', selected.length !== 0);
222
}
223
224
// ======================
225
// ==  Folder actions  ==
226
// ======================
227
228
$(document).on('click', '#tree a', function (e) {
229
  goTo($(e.target).closest('a').data('path'));
230
  toggleMobileTree(false);
231
});
232
233
function goTo(new_dir) {
234
  $('#working_dir').val(new_dir);
235
  loadItems();
236
}
237
238
function getPreviousDir() {
239
  var working_dir = $('#working_dir').val();
240
  return working_dir.substring(0, working_dir.lastIndexOf('/'));
241
}
242
243
function setOpenFolders() {
244
  $('#tree [data-path]').each(function (index, folder) {
245
    // close folders that are not parent
246
    var should_open = ($('#working_dir').val() + '/').startsWith($(folder).data('path') + '/');
247
    $(folder).children('i')
248
      .toggleClass('fa-folder-open', should_open)
249
      .toggleClass('fa-folder', !should_open);
250
  });
251
252
  $('#tree .nav-item').removeClass('active');
253
  $('#tree [data-path="' + $('#working_dir').val() + '"]').parent('.nav-item').addClass('active');
254
}
255
256
// ====================
257
// ==  Ajax actions  ==
258
// ====================
259
260
function performLfmRequest(url, parameter, type) {
261
  var data = defaultParameters();
262
263
  if (parameter != null) {
264
    $.each(parameter, function (key, value) {
265
      data[key] = value;
266
    });
267
  }
268
269
  $('#notify').modal('hide');
270
  $('#dialog').modal('hide');
271
272
  return $.ajax({
273
    type: 'GET',
274
    beforeSend: function(request) {
275
      var token = getUrlParam('token');
276
      if (token !== null) {
277
        request.setRequestHeader("Authorization", 'Bearer ' + token);
278
      }
279
    },
280
    dataType: type || 'text',
281
    url: lfm_route + '/' + url,
282
    data: data,
283
    cache: false
284
  }).fail(function (jqXHR, textStatus, errorThrown) {
285
    displayErrorResponse(jqXHR);
286
  });
287
}
288
289
function displayErrorResponse(jqXHR) {
290
  var message = JSON.parse(jqXHR.responseText) ?? ''
291
  if (Array.isArray(message)) {
292
    message = message.join('<br>')
293
  }
294
  notify('<div style="max-height:50vh;overflow: auto;">' + message + '</div>');
295
}
296
297
var refreshFoldersAndItems = function (data) {
298
  loadFolders();
299
  if (data != 'OK') {
300
    data = Array.isArray(data) ? data.join('<br/>') : data;
301
    notify(data);
302
  }
303
};
304
305
var hideNavAndShowEditor = function (data) {
306
  $('#nav-buttons > ul').addClass('d-none');
307
  $('#content').html(data);
308
  $('#pagination').removeClass('preserve_actions_space')
309
  clearSelected();
310
}
311
312
function loadFolders() {
313
  performLfmRequest('folders', {}, 'html')
314
    .done(function (data) {
315
      $('#tree').html(data);
316
      loadItems();
317
    });
318
}
319
320
function generatePaginationHTML(el, args) {
321
  var template = '<li class="page-item"><\/li>';
322
  var linkTemplate = '<a class="page-link"><\/a>';
323
  var currentPage = args.currentPage;
324
  var totalPage = args.totalPage;
325
  var rangeStart = args.rangeStart;
326
  var rangeEnd = args.rangeEnd;
327
  var i;
328
329
  // Disable page range, display all the pages
330
  if (args.pageRange === null) {
331
    for (i = 1; i <= totalPage; i++) {
332
      var button = $(template)
333
        .attr('data-num', i)
334
        .append($(linkTemplate).html(i));
335
      if (i == currentPage) {
336
        button.addClass('active');
337
      }
338
      el.append(button);
339
    }
340
341
    return;
342
  }
343
344
  if (rangeStart <= 3) {
345
    for (i = 1; i < rangeStart; i++) {
346
      var button = $(template)
347
        .attr('data-num', i)
348
        .append($(linkTemplate).html(i));
349
      if (i == currentPage) {
350
        button.addClass('active');
351
      }
352
      el.append(button);
353
    }
354
  } else {
355
    var button = $(template)
356
      .attr('data-num', 1)
357
      .append($(linkTemplate).html(1));
358
    el.append(button);
359
360
    var button = $(template)
361
      .addClass('disabled')
362
      .append($(linkTemplate).html('...'));
363
    el.append(button);
364
  }
365
366
  for (i = rangeStart; i <= rangeEnd; i++) {
367
    var button = $(template)
368
      .attr('data-num', i)
369
      .append($(linkTemplate).html(i));
370
    if (i == currentPage) {
371
      button.addClass('active');
372
    }
373
    el.append(button);
374
  }
375
376
  if (rangeEnd >= totalPage - 2) {
377
    for (i = rangeEnd + 1; i <= totalPage; i++) {
378
      var button = $(template)
379
        .attr('data-num', i)
380
        .append($(linkTemplate).html(i));
381
      el.append(button);
382
    }
383
  } else {
384
    var button = $(template)
385
      .addClass('disabled')
386
      .append($(linkTemplate).html('...'));
387
    el.append(button);
388
389
    var button = $(template)
390
      .attr('data-num', totalPage)
391
      .append($(linkTemplate).html(totalPage));
392
    el.append(button);
393
  }
394
}
395
396
function createPagination(paginationSetting) {
397
  var el = $('<ul class="pagination" role="navigation"></ul>');
398
399
  var currentPage = paginationSetting.current_page;
400
  var pageRange = 5;
401
  var totalPage = Math.ceil(paginationSetting.total / paginationSetting.per_page);
402
403
  var rangeStart = currentPage - pageRange;
404
  var rangeEnd = currentPage + pageRange;
405
406
  if (rangeEnd > totalPage) {
407
    rangeEnd = totalPage;
408
    rangeStart = totalPage - pageRange * 2;
409
    rangeStart = rangeStart < 1 ? 1 : rangeStart;
410
  }
411
412
  if (rangeStart <= 1) {
413
    rangeStart = 1;
414
    rangeEnd = Math.min(pageRange * 2 + 1, totalPage);
415
  }
416
417
  generatePaginationHTML(el, {
418
    totalPage: totalPage,
419
    currentPage: currentPage,
420
    pageRange: pageRange,
421
    rangeStart: rangeStart,
422
    rangeEnd: rangeEnd
423
  });
424
425
  $('#pagination').append(el);
426
}
427
428
function loadItems(page) {
429
  loading(true);
430
  performLfmRequest('jsonitems', {show_list: show_list, sort_type: sort_type, page: page || 1}, 'html')
431
    .done(function (data) {
432
      selected = [];
433
      var response = JSON.parse(data);
434
      var working_dir = response.working_dir;
435
      items = response.items;
436
      var hasItems = items.length !== 0;
437
      var hasPaginator = !!response.paginator;
438
      $('#empty').toggleClass('d-none', hasItems);
439
      $('#content').html('').removeAttr('class');
440
      $('#pagination').html('').removeAttr('class');
441
442
      if (hasItems) {
443
        $('#content').addClass(response.display);
444
        $('#pagination').addClass('preserve_actions_space');
445
446
        items.forEach(function (item, index) {
447
          var template = $('#item-template').clone()
448
            .removeAttr('id class')
449
            .attr('data-id', index)
450
            .click(toggleSelected)
451
            .dblclick(function (e) {
452
              if (item.is_file) {
453
                use(getSelectedItems());
454
              } else {
455
                goTo(item.url);
456
              }
457
            });
458
459
          if (item.thumb_url) {
460
            var image = $('<div>').css('background-image', 'url("' + item.thumb_url + '?timestamp=' + item.time + '")');
461
          } else {
462
            var icon = $('<div>').addClass('ico');
463
            var image = $('<div>').addClass('mime-icon ico-' + item.icon).append(icon);
464
          }
465
466
          template.find('.square').append(image);
467
          template.find('.item_name').text(item.name);
468
          template.find('time').text((new Date(item.time * 1000)).toLocaleString());
469
470
          $('#content').append(template);
471
        });
472
      }
473
474
      if (hasPaginator) {
475
        createPagination(response.paginator);
476
477
        $('#pagination a').on('click', function(event) {
478
          event.preventDefault();
479
480
          loadItems($(this).closest('li')[0].getAttribute('data-num'));
481
482
          return false;
483
        });
484
      }
485
486
      $('#nav-buttons > ul').removeClass('d-none');
487
488
      $('#working_dir').val(working_dir);
489
      console.log('Current working_dir : ' + working_dir);
490
      var breadcrumbs = [];
491
      var validSegments = working_dir.split('/').filter(function (e) { return e; });
492
      validSegments.forEach(function (segment, index) {
493
        if (index === 0) {
494
          // set root folder name as the first breadcrumb
495
          breadcrumbs.push($("[data-path='/" + segment + "']").text());
496
        } else {
497
          breadcrumbs.push(segment);
498
        }
499
      });
500
501
      $('#current_folder').text(breadcrumbs[breadcrumbs.length - 1]);
502
      $('#breadcrumbs > ol').html('');
503
      breadcrumbs.forEach(function (breadcrumb, index) {
504
        var li = $('<li>').addClass('breadcrumb-item').text(breadcrumb);
505
506
        if (index === breadcrumbs.length - 1) {
507
          li.addClass('active').attr('aria-current', 'page');
508
        } else {
509
          li.click(function () {
510
            // go to corresponding path
511
            goTo('/' + validSegments.slice(0, 1 + index).join('/'));
512
          });
513
        }
514
515
        $('#breadcrumbs > ol').append(li);
516
      });
517
518
      var atRootFolder = getPreviousDir() == '';
519
      $('#to-previous').toggleClass('d-none invisible-lg', atRootFolder);
520
      $('#show_tree').toggleClass('d-none', !atRootFolder).toggleClass('d-block', atRootFolder);
521
      setOpenFolders();
522
      loading(false);
523
      toggleActions();
524
    });
525
}
526
527
function loading(show_loading) {
528
  $('#loading').toggleClass('d-none', !show_loading);
529
}
530
531
function createFolder(folder_name) {
532
  performLfmRequest('newfolder', {name: folder_name})
533
    .done(refreshFoldersAndItems);
534
}
535
536
// ==================================
537
// ==         File Actions         ==
538
// ==================================
539
540
function rename(item) {
541
  dialog(lang['message-rename'], item.name, function (new_name) {
542
    performLfmRequest('rename', {
543
      file: item.name,
544
      new_name: new_name
545
    }).done(refreshFoldersAndItems);
546
  });
547
}
548
549
function trash(items) {
550
  confirm(lang['message-delete'], function () {
551
    performLfmRequest('delete', {
552
      items: items.map(function (item) { return item.name; })
553
    }).done(refreshFoldersAndItems)
554
  });
555
}
556
557
function crop(item) {
558
  performLfmRequest('crop', {img: item.name})
559
    .done(hideNavAndShowEditor);
560
}
561
562
function resize(item) {
563
  performLfmRequest('resize', {img: item.name})
564
    .done(hideNavAndShowEditor);
565
}
566
567
function download(items) {
568
  items.forEach(function (item, index) {
569
    var data = defaultParameters();
570
571
    data['file'] = item.name;
572
573
    var token = getUrlParam('token');
574
    if (token) {
575
      data['token'] = token;
576
    }
577
578
    setTimeout(function () {
579
      location.href = lfm_route + '/download?' + $.param(data);
580
    }, index * 100);
581
  });
582
}
583
584
function open(item) {
585
  goTo(item.url);
586
}
587
588
function preview(items) {
589
  var carousel = $('#carouselTemplate').clone().attr('id', 'previewCarousel').removeClass('d-none');
590
  var imageTemplate = carousel.find('.carousel-item').clone().removeClass('active');
591
  var indicatorTemplate = carousel.find('.carousel-indicators > li').clone().removeClass('active');
592
  carousel.children('.carousel-inner').html('');
593
  carousel.children('.carousel-indicators').html('');
594
  carousel.children('.carousel-indicators,.carousel-control-prev,.carousel-control-next').toggle(items.length > 1);
595
596
  items.forEach(function (item, index) {
597
    var carouselItem = imageTemplate.clone()
598
      .addClass(index === 0 ? 'active' : '');
599
600
    if (item.thumb_url) {
601
      carouselItem.find('.carousel-image').css('background-image', 'url(\'' + item.url + '?timestamp=' + item.time + '\')');
602
    } else {
603
      carouselItem.find('.carousel-image').css('width', '50vh').append($('<div>').addClass('mime-icon ico-' + item.icon));
604
    }
605
606
    carouselItem.find('.carousel-label').attr('target', '_blank').attr('href', item.url)
607
      .text(item.name)
608
      .append($('<i class="fas fa-external-link-alt ml-2"></i>'));
609
610
    carousel.children('.carousel-inner').append(carouselItem);
611
612
    var carouselIndicator = indicatorTemplate.clone()
613
      .addClass(index === 0 ? 'active' : '')
614
      .attr('data-slide-to', index);
615
    carousel.children('.carousel-indicators').append(carouselIndicator);
616
  });
617
618
619
  // carousel swipe control
620
  var touchStartX = null;
621
622
  carousel.on('touchstart', function (event) {
623
    var e = event.originalEvent;
624
    if (e.touches.length == 1) {
625
      var touch = e.touches[0];
626
      touchStartX = touch.pageX;
627
    }
628
  }).on('touchmove', function (event) {
629
    var e = event.originalEvent;
630
    if (touchStartX != null) {
631
      var touchCurrentX = e.changedTouches[0].pageX;
632
      if ((touchCurrentX - touchStartX) > 60) {
633
        touchStartX = null;
634
        carousel.carousel('prev');
635
      } else if ((touchStartX - touchCurrentX) > 60) {
636
        touchStartX = null;
637
        carousel.carousel('next');
638
      }
639
    }
640
  }).on('touchend', function () {
641
    touchStartX = null;
642
  });
643
  // end carousel swipe control
644
645
  notify(carousel);
646
}
647
648
function move(items) {
649
  performLfmRequest('move', { items: items.map(function (item) { return item.name; }) })
650
    .done(refreshFoldersAndItems);
651
}
652
653
function getUrlParam(paramName) {
654
  var reParam = new RegExp('(?:[\?&]|&)' + paramName + '=([^&]+)', 'i');
655
  var match = window.location.search.match(reParam);
656
  return ( match && match.length > 1 ) ? match[1] : null;
657
}
658
659
function use(items) {
660
  function useTinymce3(url) {
661
    if (!usingTinymce3()) { return; }
662
663
    var win = tinyMCEPopup.getWindowArg("window");
664
    win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = url;
665
    if (typeof(win.ImageDialog) != "undefined") {
666
      // Update image dimensions
667
      if (win.ImageDialog.getImageData) {
668
        win.ImageDialog.getImageData();
669
      }
670
671
      // Preview if necessary
672
      if (win.ImageDialog.showPreviewImage) {
673
        win.ImageDialog.showPreviewImage(url);
674
      }
675
    }
676
    tinyMCEPopup.close();
677
  }
678
679
  function useTinymce4AndColorbox(url) {
680
    if (!usingTinymce4AndColorbox()) { return; }
681
682
    parent.document.getElementById(getUrlParam('field_name')).value = url;
683
684
    if(typeof parent.tinyMCE !== "undefined") {
685
      parent.tinyMCE.activeEditor.windowManager.close();
686
    }
687
    if(typeof parent.$.fn.colorbox !== "undefined") {
688
      parent.$.fn.colorbox.close();
689
    }
690
  }
691
692
  function useTinymce5(url){
693
    if (!usingTinymce5()) { return; }
694
695
    parent.postMessage({
696
      mceAction: 'insert',
697
      content: url
698
    });
699
700
    parent.postMessage({ mceAction: 'close' });
701
  }
702
703
  function useCkeditor3(url) {
704
    if (!usingCkeditor3()) { return; }
705
706
    if (window.opener) {
707
      // Popup
708
      window.opener.CKEDITOR.tools.callFunction(getUrlParam('CKEditorFuncNum'), url);
709
    } else {
710
      // Modal (in iframe)
711
      parent.CKEDITOR.tools.callFunction(getUrlParam('CKEditorFuncNum'), url);
712
      parent.CKEDITOR.tools.callFunction(getUrlParam('CKEditorCleanUpFuncNum'));
713
    }
714
  }
715
716
  function useFckeditor2(url) {
717
    if (!usingFckeditor2()) { return; }
718
719
    var p = url;
720
    var w = data['Properties']['Width'];
721
    var h = data['Properties']['Height'];
722
    window.opener.SetUrl(p,w,h);
723
  }
724
725
  var url = items[0].url;
726
  var callback = getUrlParam('callback');
727
  var useFileSucceeded = true;
728
729
  if (usingWysiwygEditor()) {
730
    useTinymce3(url);
731
732
    useTinymce4AndColorbox(url);
733
734
    useTinymce5(url);
735
736
    useCkeditor3(url);
737
738
    useFckeditor2(url);
739
  } else if (callback && window[callback]) {
740
    window[callback](getSelectedItems());
741
  } else if (callback && parent[callback]) {
742
    parent[callback](getSelectedItems());
743
  } else if (window.opener) { // standalone button or other situations
744
    window.opener.SetUrl(getSelectedItems());
745
  } else {
746
    useFileSucceeded = false;
747
  }
748
749
  if (useFileSucceeded) {
750
    if (window.opener) {
751
      window.close();
752
    }
753
  } else {
754
    console.log('window.opener not found');
755
    // No editor found, open/download file using browser's default method
756
    window.open(url);
757
  }
758
}
759
//end useFile
760
761
// ==================================
762
// ==     WYSIWYG Editors Check    ==
763
// ==================================
764
765
function usingTinymce3() {
766
  return !!window.tinyMCEPopup;
767
}
768
769
function usingTinymce4AndColorbox() {
770
  return !!getUrlParam('field_name');
771
}
772
773
function usingTinymce5(){
774
    return !!getUrlParam('editor');
775
}
776
777
function usingCkeditor3() {
778
  return !!getUrlParam('CKEditor') || !!getUrlParam('CKEditorCleanUpFuncNum');
779
}
780
781
function usingFckeditor2() {
782
  return window.opener && typeof data != 'undefined' && data['Properties']['Width'] != '';
783
}
784
785
function usingWysiwygEditor() {
786
  return usingTinymce3() || usingTinymce4AndColorbox() || usingTinymce5() || usingCkeditor3() || usingFckeditor2();
787
}
788
789
// ==================================
790
// ==            Others            ==
791
// ==================================
792
793
function defaultParameters() {
794
  return {
795
    working_dir: $('#working_dir').val(),
796
    type: $('#type').val()
797
  };
798
}
799
800
function notImp() {
801
  notify('Not yet implemented!');
802
}
803
804
function notify(body) {
805
  $('#notify').find('.btn-primary').off('click').hide();
806
  $('#notify').modal('show').find('.modal-body').html(body);
807
  if (!$('#notify').hasClass('show')) {
808
    $('#notify').modal('show');
809
  }
810
}
811
812
function confirm(body, callback) {
813
  $('#notify').find('.btn-primary').toggle(callback !== undefined);
814
  $('#notify').find('.btn-primary').on('click', callback);
815
  $('#notify').modal('show').find('.modal-body').html(body);
816
}
817
818
function dialog(title, value, callback) {
819
  $('#dialog').find('input').val(value);
820
  $('#dialog').on('shown.bs.modal', function () {
821
    $('#dialog').find('input').focus();
822
  });
823
  $('#dialog').find('.btn-primary').off('click').on('click', function (e) {
824
    callback($('#dialog').find('input').val());
825
  });
826
  $('#dialog').modal('show').find('.modal-title').text(title);
827
}
828